/*
   解题思路：
     借助两个队列来模拟实现栈。一个队列是辅助的，起到导元素的作用
     入栈：
       先将元素放入a队列中，如果b不空，将b中所有元素导入到a中
       此时，刚刚入栈的元素刚好在a的队头，然后将a和b队列交换下
       即：b队列队头相当于栈顶，b队列队尾相当于栈底
     出栈：
       直接从b中poll()即可
     获取栈顶元素：
       直接从b中peek()即可
 */
class MyStack {
    private Queue<Integer> a;  // a是用来辅助导元素的
    private Queue<Integer> b;  // 元素全部放在b中
    public MyStack() {
        a = new LinkedList<>();
        b = new LinkedList<>();
    }
    
    public void push(int x) {
        // 先把元素放入a队列中
        a.offer(x);

        while(!b.isEmpty()){
            a.offer(b.poll());
        }

        Queue<Integer> temp = a;
        a = b;
        b = temp;
    }
    
    public int pop() {
        return b.poll();
    }
    
    public int top() {
        return b.peek();
    }
    
    public boolean empty() {
        return b.isEmpty();
    }
}
